Εντολές (συναρτήσεις) ελέγχου ροής προγράμματος

Table

Table[a[x], {3}]

Table[a[x], {x,6}]

Table[a[x], {x,3,6}]

Table[a[x], {x,6,10,2}]

Table[a[x], {x, 15, 3, -2}]

k=1;p=1;Table[a[x], {x, k, k+5p, 2p}]
{k,p}

Clear[k,p];
Module[{k=1,p=1},Table[a[x],{x,k,k+5p,2p}]]
{k,p}

Table[x+y,{x,2,5},{y,3,4}]

Table[x+y,{x,2,4}, {y,x-1,4}]//TableForm

Παραδείγματα

Table[j, {i,4},{j,i}]//TableForm

Table[j, {i,4,1,-1},{j,i}]

Table[j, {i,4,1,-1},{j,i,4,1}]

Table[j, {i,7,1,-2},{j,i,7,2}]

Range

Range[8] 
Range[1, 6, 2]

Sum

Sum[a^2, {4}]

Sum[i^2, {i,3,k}]

Sum[1/i^2, {i,Infinity}]

Sum[a[i], {i,4}]

Sum[a[i], {i,k}]

Sum[a[i,j], {i,3},{j,i,3}]

Γινόμενο Product (παρόμοιο με  Sum)

Εντολές Επιλογής

If

Clear["`*"];
x=15;y=5;z=10;
If[x>y,{y,x},{x,y}]
If[z<y,{z,y},{y,z}]
If[z<w,{x,w},{w,z},"?"]
If[z<w,{x,w},{w,z}]

Mod[10,4]

Table[Sqrt[i],{i,5,10.6}]

div[n_]:=Table[If[Mod[n,i]==0,1,0],{i,2,Floor[Sqrt[n]]}]
div[2]

PrimeQ[31]

Apply[Plus,{1,2,3}]

primeq[n_]:=If[n==2,True,If[Apply[Plus,div[n]]==0,True,False]]
{primeq[31],PrimeQ[31]}

Which

Clear["`*"]

Which[test1, v1, test2, v2 ... testn, vn] ανακύκλωση μέχρι κάποιο testi να είναι true.
For i = 1,2,...n
•  Εάν το testi είναι   True  τότε επιστρέφει την τιμή του αντίστοιχου vi 
•  Εάν κάποιο testi δεν είναι  True ή  False τότε επιστρέφει το αντικείμενο Which[testi, vi...] 
•  Εάν όλα τα  testi* είναι  False τοτε η   Which[] επιστρέφει  Null.

Για αποφυγή του  Null πρέπει το τελευταίο testn να είναι  True.

a=10;
e1=Which[a==1,2a,a==2,3a,a==10,10a,a==20,20a]

e1

a=10;
Which[a==1,2a,a==2,3a,a==20,20a]

a=10;
Which[a==1,2a,a==2,3a,True,"a outside of range"]

g[x_]:=x/;x<0
g[x_]:=Sin[x]/; x≥0

Plot[g[x],{x,-2Pi,2Pi}]

f[x_]:=If[x<0,x,Sin[x]]

Plot[f[x],{x,-2Pi,2Pi}]

Plot[Which[x<0,x,x≥0,Sin[x]],{x,-2π,2π}]

Switch

Switch[expr, pat1, v1, pat2, v2 ... patn, vn]
For i = 1,2,...n
•  Εάν ταιριάζουν οι τιμές expr με το  pati τότε επιστρέφει την τιμη vi  
• Αν δεν ταιριάζει κανένα πρότυπο τότε επιστρέφει όλη την  Switch[expr*, pat1, w1, ...] 

Για αποφυγή επιστροφής της Switch σε περίπτωση μη ταιριάσματος καλό είναι το τελευταίο τεστ να είναι το   _

Clear[a];

Switch[a+1,b+1, 2,a+1,10]

Switch[a+b,_,{a},10,Pi]

Switch[a+1,c+b+1, 2,a+2,10]

Switch[a+1,1+1, 2,b+1,10,_,"error"]

Examples

whichfun[expr_]:=Which[Head[expr]===Plus,2 expr, Head[expr]===Times,expr*expr,Head[expr]===List,Reverse[expr]]

{whichfun[{a,b}],whichfun[a+b],whichfun[a*b],whichfun[a^b]}

whichfun1[expr_]:=Which[Head[expr]===Plus,2 expr, Head[expr]===Times,expr*expr,Head[expr]===List,Reverse[expr],True, expr]

{whichfun1[{a,b}],whichfun1[a+b],whichfun1[a*b],whichfun1[a^b]}

switchfun[expr_]:=Switch[Head[expr],Plus,2 expr, Times,expr*expr,List,Reverse[expr]]

{switchfun[{a,b}],switchfun[a+b],switchfun[a*b],switchfun[a^b]}

switchfun1[expr_]:=Switch[Head[expr],Plus,2 expr, Times,expr*expr,List,Reverse[expr],_,expr]

{switchfun1[{a,b}],switchfun1[a+b],switchfun1[a*b],switchfun1[a^b]}

DW[y_, x_] :=
	Which[y===x, 1,
		           Length[y]===2&& 
		          y[[0]]===Power&&
			        y[[1]]===x,
		                                 n=y[[2]];n x^(n-1),
		           y===Cos[x], -Sin[x],
	           	y===Sin[x], Cos[x],
		           True, "Unknown"]

{DW[(x^3), x], DW[y, y], DW[Sin[z], z], DW[w^(1/2), w], DW[f[r], r]}

DS[y_, x_] :=
	Switch[y,   x,               1,
                             x^n_,       y[[2]]x^(y[[2]]-1),
                           (*  x^n_,    y/.x^n_->n x^(n-1), *)
		                Cos[x],   -Sin[x],
		                 _,             "Unknown"]

{DS[(x^3), x], DS[y, y], DS[Cos[z], z],DS[w^(1/2), w], DS[f[r], r]}

Εντολές επανάληψης

Do

x=.

Do[Print[x^2],{2}]

Do[Print[x^2],{x,8,5,-2}]

Do[Print[{x,y}],{x,2,3}, {y,x,3}]

While

i=1

i++

i

a=0;i=1;While[i++<=5,a=a+i];a

a=0;i=1;While[i<=5,a=a+i;i=i+1];a

For

For[i=1;t=x,(i^2)<10,i++,t=t+i;Print[t]]

For[i=1,i<5,Print[i];i++]

Module, Block, Διαδικασίες

Block - δυναμική εμβέλεια μεταβλητών

Module - λεξική εμβέλεια - τοπικές μεταβλητές

Clear["`*"]

var:=x;

x=10;var

x=20;var

Module[{x},x=50;{x,var}]

x

Module[{x},{x,var}]

Block[{x},x=80;{x,var}]

x

Block[{x},{x,var}]

Clear[sumB];sumB[x_] := Block[{i}, Sum[x^i, {i, 1, 4}]]

Clear[sumM];sumM[x_] := Module[{i}, Sum[x^i, {i, 1, 4}]]

{sumM[a],sumM[i]}

{sumB[a],sumB[i]}

With - λεξική εμβέλεια για μεταβλητές  με σταθερές τιμές

z=0
w[x_]:=With[{z=x},z+Sin[z]]
w[Pi/2]

z

Function

Function[x,x^2]

Function[x,x^2][5]

Function[{x,y},x+y][10,5]

Function[x,x^2][{1,2,3}]

(#^2)&[5]

(# &)[{1,2,3}]

If[#1>#2,True,False]& [10,20]

g=Function[{x,y},(x^2)+y]

g[q,s]

Break

i=0;While[i<6, i++;Print[i];If[i===3, Break[]]];i

i=0;j=0;Do[ j++;If[i === 3, Break[]], {i,5}]
{i,j}

Continue

Do[ If[i == 2, Continue[]];Print[i], {i,3}]

x=0;While[x<=3, x=x+1;If[x == 2, Continue[]];Print[x]]

Return

Return[3]

f[x_] :=Module[{y},y=Sqrt[x]]
f[3]

f[x_] :=Module[{y},Return[10];y=Sqrt[x];Return[y]]
f[3]

Clear[fact]

fact[n_]:=Module[{i=0,r=1},
If[n==0,1,
                 While[i!=n,i++;r=r*i]];
r]

Table[fact[k],{k,10}]

fact1[n_]:=Module[{r},
r=1;
If[n==0,1,
                 Do[r=r*i,{i,n}]];
r]

Table[fact1[k],{k,10}]

fact2[n_]:=Module[{r},
r=1;
If[n==0,Return[1],
                 Do[r=r*i,{i,n}]];
Return[r]]

Table[fact2[k],{k,10}]